package Server.TechnicalServices.Foundation;

import java.util.ArrayList;

import org.hibernate.*;
import org.hibernate.criterion.Restrictions;



import Server.Entity.Dominio.*;

/**
 * 
 * Gestisce le dipendenze con il database delle classi figlie di EDipendenteI
 * 
 * @author Gruppo 6
 */
public class FDipendente {
	
	private FHibernateFacadeSingleton hibernate = FHibernateFacadeSingleton.istanza();
	private Session session = hibernate.getSession();
	
	/**
	 * 
	 * Restituisce una lista dei sottoprogetti gestiti da un manager
	 * 
	 * @param manager 
	 * @return
	 */
	public ArrayList getSottoprogettiManager(EManager manager)
	{
		Criteria crit = session.createCriteria(ESottoprogetto.class).add( Restrictions.eq("manager", manager));
		return (ArrayList) crit.list();
	}
	
	/**
	 * 
	 * Restituisce una lista di task affidati a un consulente
	 * 
	 * @param consulente
	 * @return
	 */
	public ArrayList<ETask> getTasksConsulente(EConsulente consulente) {
		Criteria crit = session.createCriteria(ETask.class).add( Restrictions.eq("consulenteAttuale", consulente));
		
		ArrayList<ETask> tasks = (ArrayList) crit.list();
		FdbFacade foundation = new FdbFacade(); 
		
		for(ETask task: tasks)
		{
			task = (ETask) foundation.load(ETask.class, ((ETask) task).getId());
		}
		
		return tasks;
	}
	
	/**
	 * 
	 * Restituisce una lista di timerecord eseguiti da un consulente
	 * 
	 * @param consulente
	 * @return
	 */
	public ArrayList<ETimeRecord> getTimeRecordConsulente(EConsulente consulente)
	{
		Criteria crit = session.createCriteria(ETimeRecord.class).add( Restrictions.eq("consulente", consulente));
		return (ArrayList<ETimeRecord>) crit.list();
	}
	/**
	 * Restituisce il dipendente in base al nome utente
	 * @param username
	 * @return
	 */
	public EWorker getDipendenteByUsername(String username) 
	{
		Criteria crit = session.createCriteria(EWorker.class).add( Restrictions.eq("username", username));
		EWorker dipendente;
		try{
			dipendente = (EWorker) crit.list().get(0);
			}
		catch(Exception e)
		{
			dipendente = null;
		}
		return dipendente;
	}	
	
}
